#region Copyright

/*---------------------------------------------------------------------------
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 * 
 * http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations under 
 * the License.
 * 
 * The Initial Developer of the Original Code is Robert Smyth.
 * Portions created by Robert Smyth are Copyright (C) 2008.
 * 
 * All Rights Reserved.
 *---------------------------------------------------------------------------*/

#endregion Copyright

using System.Reflection;
using JetBrains.ActionManagement;
using NUnit.Framework;


namespace NoeticTools.PluginValidation
{
    public abstract class PluginTestsContext
    {
        protected readonly string pluginAssemblyName;
        protected Assembly pluginAssembly;

        protected PluginTestsContext(string pluginAssemblyName)
        {
            this.pluginAssemblyName = pluginAssemblyName;
        }

        [SetUp]
        public void BaseSetUp()
        {
            string fullPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, pluginAssemblyName);
            pluginAssembly = Assembly.LoadFile(fullPath);
            SetUp();
        }

        protected abstract void SetUp();

        protected T GetAssemblyAttribute<T>()
        {
            object[] foundAttributes = pluginAssembly.GetCustomAttributes(typeof(ActionsXmlAttribute), false);
            return (T)foundAttributes[0];
        }
    }
}